package com.itheima.a03threadcase3;

import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * 多线程的第三种实现方式
 *  特点：可以获取到线程运行的结果 --对前面两种方式的补充
 *
 *      -- 创建一个类MyCallable实现Callable接口
 *      -- 重写 call (返回值就是多线程的返回结果)
 *
 *      -- 创建MyCallable的对象（表示多线程的执行的任务）
 *      -- 创建FutureTask的对象（作用就是管理多线程的运行结果）
 *      -- 创建Thread类的对象 ， 启动任务
 */
public class ThreadDemo {

    public static void main(String[] args) throws ExecutionException, InterruptedException {

        //创建任务对象
        MyCallable myCallable = new MyCallable() ;

        //创建Future管理运行结果    -- 泛型也是返回结果
        FutureTask<Integer> futureTask = new FutureTask<Integer>(myCallable) ;

        //创建线程对象    -- 传入的对象成 futureTask 了
        Thread thread = new Thread(futureTask) ;

        //启动线程
        thread.start();

        //获取运行结果
        Integer i = futureTask.get();
        System.out.println(i);
    }
}
